iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
Software Development

Ruby 研究 30 天系列 第 5

Day 4 - 迴圈與迭代

  • 分享至 

  • xImage
  •  

Loop

迴圈是電腦科學運算領域的用語,也是一種常見的控制流程。迴圈是一段在程式中只出現一次,但可能會連續執行多次的程式碼。迴圈中的程式碼會執行特定的次數,或者是執行到特定條件成立時結束迴圈,或者是針對某一集合中的所有項目都執行一次。 - 維基百科

  • while loop
    跑個10圈吧!跑完才能停。
$ irb
counter = 1                # 起始值
while counter <= 10        # 結束值
  puts " 第 #{counter} 圈"
  counter += 1             # 條件,如果沒有設定條件可能造成無窮迴圈
end

  • times / upto / downto
    當已知要重複的次數時, Ruby 裡有個直觀且常用的寫法 times ,寫起來就像「我要做 幾次 這件事」:
$ irb
3.times do
  puts "很重要所以說三次"
end

很重要所以說三次
很重要所以說三次
很重要所以說三次

# 或是依序列出

1.upto(3) do |i|            # 這裡的小括號()是可以省略的
  puts " 很重要所以說 #{i} 次 "
end

很重要所以說 1 次
很重要所以說 2 次
很重要所以說 3 次

在 Ruby 裡方法後面的小括號()可以省略,也可以寫成這樣 1.upto 3


Iteration

疊代是重複回饋過程的活動,其目的通常是為了接近併到達所需的目標或結果。每一次對過程的重複被稱為一次「疊代」,而每一次疊代得到的結果會被用來作為下一次疊代的初始值。 - 維基百科

  • Each
    現在我們會做陣列了,指定一個變數 song 給音符陣列,將陣列裡的元素一一印出,但我希望它看起來有點聲音,在 每個 音符後面加上「~」,這時候我們可以用 each 一次到位,畢竟如果整首曲子都要加,可能會加到翻桌:
$ irb
song = ["do", "re", "mi", "fa", "so"]
.each do |note|
  p "#{note}~"
end

do~
re~
mi~
fa~
so~
  • Select
    從集合裡挑選符合條件的元素,並收集成一個新的集合。
$ irb
(1..42).select { |num| num % 7 == 0 }
#  挑出 7 的倍數
=> [7, 14, 21, 28, 35, 42]
  • Map
    對集合裡的每個元素進行運算,並收集成一個新的集合。
$ irb
(1..10).map {|num| num ** 2}             # 列出 1 到 10 的平方數

=> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  • Reduce
    對集合裡的每個元素進行運算,並將所有的運算結果歸納成一個單一結果。
$ irb
(1..10).reduce { |sum, n| sum + n ** 2}   # 列出 1 到 10 的平方數總和

=> 385

Select / Map / Reduce 是操作集合好用的方法,並且可以接其他的方法或判斷,這裡的花括號 {} 我們稱做 Block 用起來跟 do..end 差不多,以程式碼的可讀性來說並沒有好壞分別,但大括號的優先順序較高,有時候會造成不同結果,之後再分享 block篇。

參考資料:
為你自己學 Ruby on Rails

此文同步刊登於CJ-Han的網站


上一篇
Day 3 - 範圍與陣列
下一篇
Day 5 - Hash
系列文
Ruby 研究 30 天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言